/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.gov.fasepa.sgpf.bean;

import br.gov.fasepa.sgpf.entity.Servidor;
import br.gov.fasepa.sgpf.entity.Setor;
import br.gov.fasepa.sgpf.entity.Subsetor;
import br.gov.fasepa.sgpf.rn.ServidorRN;
import br.gov.fasepa.sgpf.rn.SetorRN;
import br.gov.fasepa.sgpf.rn.SubsetorRN;
import br.gov.fasepa.sgpf.util.JsfUtil;
import br.gov.fasepa.sgpf.util.SystemUtil;
import br.gov.fasepa.sgpf.util.Validator;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;

/**
 *
 * @author marcosdj
 */
@ManagedBean
@ViewScoped
public class SubsetorBean extends SubsetorRN implements Serializable {

    private Subsetor subsetor = new Subsetor();
    private Validator validator = new Validator();
    private SetorRN setorRN = new SetorRN();
    private List<Servidor> servidores;
    private String titulo;
    private List<Setor> setores;
    private List<Subsetor> subsetores;

    public SubsetorBean() {
        this.titulo = "CADASTRAR SUBSETOR";
        if (JsfUtil.getSession().getAttribute("UC") != null) {
            Object[] array = (Object[]) JsfUtil.getSession().getAttribute("UC");
            if (array[1] instanceof Subsetor) {
                this.subsetor = (Subsetor) array[1];
            }
            this.titulo = "ALTERAR CADASTRO DE SUBSETOR";
        }

    }

    public String irCadSetor() {
        validator.verificaSessao();
        return "/sistema/subsetor/cadastro.xhtml?faces-redirect=true";
    }

    public String irLista() {
        validator.verificaSessao();
        return "/sistema/subsetor/lista.xhtml?faces-redirect=true";
    }

    public void alterar() throws IOException {
        FacesContext.getCurrentInstance().getExternalContext().redirect("cadastro.xhtml");
    }

    public void putInSession(Subsetor subsetor) throws Exception {
        SystemUtil.updateUseCase(subsetor, Subsetor.class);
    }

    public void verificaCamposDialog() {
        if (validarCampos()) {
            RequestContext.getCurrentInstance().addCallbackParam("flag", "salvar");
        } else {
            RequestContext.getCurrentInstance().update("formSubsetor");
        }
    }

    public void salvar() {
        if (JsfUtil.getSession().getAttribute("UC") == null) {
            subsetor.getSetor().getSubsetorList().add(subsetor);
            setorRN.edit(subsetor.getSetor());
        } else {
            edit(subsetor);
        }
        subsetor = null;
        RequestContext.getCurrentInstance().addCallbackParam("flag", "ok");
        validator.verificaSessao();
    }

    public void cancelar() throws IOException {
        validator.verificaSessao();
        subsetor = new Subsetor();
        this.titulo = "CADASTRAR SUBSETOR";
    }

    public boolean validarCampos() {
        boolean resposta = true;
        if (subsetor.getNome().trim().equals("")) {
            FacesContext.getCurrentInstance().
                    addMessage("msgNome",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O Campo Nome é obrigatório", ""));
            resposta = false;
        }

        if (subsetor.getSigla().trim().equals("")) {
            FacesContext.getCurrentInstance().
                    addMessage("msgSigla",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O Campo Sigla é obrigatório", ""));
            resposta = false;
        }

        if (subsetor.getResponsavel() == null) {
            FacesContext.getCurrentInstance().
                    addMessage("msgResponsavel",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O Campo Responsável é obrigatório", ""));
            resposta = false;
        }

        if (subsetor.getResponsavel() != null) {
            if (validator.isResponsavel(subsetor.getResponsavel())) {
                FacesContext.getCurrentInstance().
                        addMessage("msgResponsavel",
                                new FacesMessage(FacesMessage.SEVERITY_ERROR, "O Servidor já é responsável por alguma unidade ou setor", ""));
                resposta = false;

            }
        }

        if (subsetor.getSetor() == null) {
            FacesContext.getCurrentInstance().
                    addMessage("msgSetor",
                            new FacesMessage(FacesMessage.SEVERITY_ERROR, "O Campo Setor é obrigatório", ""));
            resposta = false;
        }
        return resposta;
    }

    public Subsetor getSubsetor() {
        return subsetor;
    }

    public void setSubsetor(Subsetor subsetor) {
        this.subsetor = subsetor;
    }

    public List<Servidor> getServidores() {
        if (servidores == null) {
            servidores = new ServidorRN().obtainAll(Servidor.class);
        }
        return servidores;
    }

    public void setServidores(List<Servidor> servidores) {
        this.servidores = servidores;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public List<Setor> getSetores() {
        if (setores == null) {
            setores = new SetorRN().obtainAll(Setor.class);
        }
        return setores;
    }

    public void setSetores(List<Setor> setores) {
        this.setores = setores;
    }

    public List<Subsetor> getSubsetores() {
        if (subsetores == null) {
            subsetores = obtainAll(Subsetor.class);
        }
        return subsetores;
    }

    public void setSubsetores(List<Subsetor> subsetores) {
        this.subsetores = subsetores;
    }

}
